﻿//boj 1896 
#include <iostream>
#include <string>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
using namespace std;
#define inf 0x3fffffff
#define see(x)    cout<<#x<<" "<<x<<endl;
#define Maxn  1030

int flag[1000000],qq;
/**********鏁扮粍寤虹珛trie鏍戞ā鏉挎敞鎰忔牴鑺傜偣鐨勭紪鍙蜂负0************************/
typedef struct trienode
{
    int val; 
    int next[26];
}trienode;
trienode trie[1000000];
int cur=0;//杩欎釜鏄缓绔媡rie 鏍戠殑鏃跺€欑敤鐨勮妭鐐圭紪鍙枫€?void init()
{
    cur =0;
}
void insert(char *s)
{
    int p=0;
    for(int i=0; s[i]; i++)
    {
        if(trie[p].next[s[i]-'a'] == 0)
        {
            trie[p].next[s[i]-'a'] =++cur;
        }
        p = trie[p].next[s[i]-'a'];
    }
    if(flag[p]<qq)
    {
    	flag[p]=qq;
    	trie[p].val++;
	}
}
int find(char *s)
{
    int    p=0;
    for(int i=0; s[i]; ++i)
    {
        if(trie[p].next[s[i]-'a']==0)
        {
            return 0;
        }
        p=trie[p].next[s[i]-'a'];
    }
    return trie[p].val;
}
/**********鏁扮粍寤虹珛trie鏍戞ā鏉?***********************/
int main()
{
    int i,n,m,j,k,t;
    scanf("%d", &n);
    char s[30],st[30];
     
    for(i=0; i<n; i++)
    {
        qq++;
        scanf("%s", s);
        int len = strlen(s);
        for(j=0; j<len; j++)
        {
            for(k=0; k+j<=len; k++)
            {
                st[k]=s[j+k];
                st[k+1]=0;
                    insert(st);
            }
        }
    }
    scanf("%d", &n);
    for(i=0; i < n; i++)
    {
        scanf("%s",s);
        int ans=find(s);
        printf("%d\n",ans);
    }
}

